package com.yyfax.pay.config.data.service;

import java.util.List;

import com.yyfax.pay.config.model.po.MerchantPaymentPO;

/**
 * 商户支付通道信息
 * 
 * @author changxd
 * @date 2017-04-13
 * @since 1.0.0
 */
public interface MerchantPaymentService {

	/**
	 * 新增商户支付通道信息
	 * 
	 * @author changxd
	 * @date 2017-04-12 19:44:45
	 * @since 1.0.0
	 * @return
	 */
	public int save(MerchantPaymentPO config) throws Exception;

	/**
	 * 更新商户支付通道信息
	 * 
	 * @author changxd
	 * @date 2017-04-12 19:44:45
	 * @since 1.0.0
	 * @return
	 */
	public int modify(MerchantPaymentPO config) throws Exception;

	/**
	 * 按ID查询商户支付通道信息
	 * 
	 * @author changxd
	 * @date 2017-04-12 19:44:45
	 * @since 1.0.0
	 * @return
	 */
	public MerchantPaymentPO queryById(int id) throws Exception;

	/**
	 * 查询全部的商户支付通道信息
	 * 
	 * @author changxd
	 * @date 2017-04-12 19:44:45
	 * @since 1.0.0
	 * @return
	 */
	public List<MerchantPaymentPO> queryForList() throws Exception;

	/**
	 * 获取商户支付关系
	 * 
	 * @author heizq
	 * @date 2017-04-12 20:22:45
	 * @since v1.0.0
	 * @param merchantCode 商户编码
	 * @param paymentCode 支付通道编号
	 * @param payType 支付类型
	 * @param payMode 支付模式
	 * @return
	 * @throws Exception
	 */

	public MerchantPaymentPO queryByThirdMerchantCode(String merchantCode, String paymentCode, String payType, String payMode) throws Exception;

	/**
	 * 查询商户支付通道支付凭证扩展信息
	 * 
	 * @author buyi
	 * @date 2017-09-02 14:12:27
	 * @since v2.0.0
	 * @param merchantCode
	 * @param paymentCode
	 * @param payType
	 * @param payMode
	 * @param clazz
	 * @return
	 * @throws Exception
	 */
	public <T> T queryByThirdMerchantCodeForExt(String merchantCode, String paymentCode, String payType, String payMode, Class<T> clazz)
			throws Exception;

	/**
	 * 获取商户支付关系
	 * 
	 * @author changxd
	 * @date 2017-04-14
	 * @since v1.0.0
	 * @param payMerchantId
	 * @param paymentCode
	 * @param payType
	 * @param payMode
	 * @return
	 * @throws Exception
	 */
	public MerchantPaymentPO queryByThirdMerchantId(String payMerchantId, String paymentCode, String payType, String payMode) throws Exception;

	/**
	 * 获取默认商户支付关系
	 * 
	 * @author changxd
	 * @date 2017-04-14
	 * @since v1.0.0
	 * @param merchantCode
	 * @param payType
	 * @param payMode
	 * @param apiType 支付接口模式，如果没有指定相应的接口模式，则默认查全部,支持null
	 * @return
	 * @throws Exception
	 */
	public MerchantPaymentPO queryDefaultByMerchantCode(String merchantCode, String payType, String payMode, String apiType) throws Exception;

	/**
	 * 根据商户编号、支付类型获取商户支付通道集合<br>
	 * 包含有效，无效
	 * 
	 * @date 2017-05-04 08:40:37
	 * @since v1.0.0
	 * @param merchantCode
	 * @param payType
	 * @return
	 */
	public List<MerchantPaymentPO> queryList(String merchantCode, String payType) throws Exception;
}
